package 二叉搜索树中的插入操作;

/**
 * createTime: 2025/4/7 23:15
 * description:
 * 给定二叉搜索树（BST）的根节点和要插入树中的值，将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证，新值和原始二叉搜索树中的任意节点值都不同。
 * 注意，可能存在多种有效的插入方式，只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。
 * @author AirMan
 */
public class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        // 递归
        // 递归参数：root，val
        // 递归返回值：TreeNode root (Solution2也可设置没有返回值)
        // 递归的终止条件：终止条件就是找到遍历的节点为null的时候，就是要插入节点的位置了，并把插入的节点返回
        // 单层递归逻辑：不需要处理中间节点的逻辑，只需要找到一个符合二叉搜索树且为null的位置即可。
        // 如果 root.val > val，那么就往left遍历
        // 如果 root.val < val。那么就往right遍历
        // 直到 root == null，该位置即为节点插入的位置

        // 递归的终止逻辑
        if (root == null){
            // root == null，该位置即为节点插入的位置
            return new TreeNode(val);
        }

        if (root.val > val){
            // 如果 root.val > val，那么就往left遍历
            root.left = insertIntoBST(root.left, val);
        }else {
            // 如果 root.val < val。那么就往right遍历
            root.right = insertIntoBST(root.right, val);
        }
        return root;
    }
}
